#ifndef __gpio_H
#define __gpio_H
#ifdef __cplusplus
 extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include "gd32f4xx.h"
#include "main.h"

#define HAL_GPIO_ReadPin(gpio_periph, pin)                   gpio_input_bit_get(gpio_periph, pin)
#define HAL_GPIO_WritePin(gpio_periph, pin, bit_value)       gpio_bit_write(gpio_periph, pin, bit_value)

enum GPIO_IN{
    NULL_IN = 0,
    IO_S1_HOME,
    IO_S2_HOME,
    IO_S3_HOME,
    IO_S4_HOME,
    IO_S1_LIMIT,
    IO_S2_LIMIT,
    IO_S3_LIMIT,
    IO_S4_LIMIT,
    IO_START_S1_PRESSED,
    IO_START_S2_PRESSED,
    IO_START_S3_PRESSED,
    IO_START_S4_PRESSED,
    IO_STOP_PRESSED,
    IO_SWITCH1,
    IO_SWITCH2,
    IO_SWITCH3,
    IO_SWITCH4,
    IO_SWITCH5,
    IO_SWITCH6,

    GPIO_IN_COUNT
};

enum GPIO_OUT{
    IO_S1_LOCK,
    IO_S2_LOCK,
    IO_S3_LOCK,
    IO_S4_LOCK,
    IO_S1_CW,
    IO_S2_CW,
    IO_S3_CW,
    IO_S4_CW,
    IO_S1_EN,
    IO_S2_EN,
    IO_S3_EN,
    IO_S4_EN,
    IO_V1,
    IO_V2,
    IO_V3,
    IO_V4,


    IO_STATELED,
    IO_START_S1_LED,
    IO_START_S2_LED,
    IO_START_S3_LED,
    IO_START_S4_LED,

    IO_SPI_CS1,
    IO_SPI_CS2,
    IO_SPI_CS3,
    IO_SPI_CS4,
    GPIO_OUT_COUNT
};

// 端口
typedef struct PORT_GROUP
{
    uint8_t inverse;
    uint32_t port;
    uint16_t pin;
} PORT_GROUP;

extern PORT_GROUP gportin[GPIO_IN_COUNT];
extern PORT_GROUP gportout[GPIO_OUT_COUNT];


void MX_GPIO_Init(void);
void InitgportList(void);


#ifdef __cplusplus
}
#endif
#endif /*__ pinoutConfig_H */

